<?php

namespace App\Http\Controllers\Home\Index\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\Sale_promotion;
use App\Model\Sort;
use App\Model\Goods;
use Illuminate\Support\Facades\Redis; 

/**
 * 此类用于执行首页懒加载函数
 * @author wuboheng <[email address]>
 */
class IndexLazyLoad extends Controller
{   
    
    /**
     * 首页懒加载,根据首页传过来的数字(比方0),拿到第1个根分类的信息,如果传1,就获取第2个根分类信息,如此类推
     * @param  [int] $sortNum [首页传来的数字,代表要获取第几个根分类,从0开始]
     * @return [json]          [属于该根分类的信息,包括: 根分类,所有子分类,属于该根分类的销量排前10的商品,属于该]
     */
    public function lazyLoad(Request $request)
    {   
        $sortNum = $request->input('sortnum');

        //==================  先从数据库查询,如果有则直接返回 ================================
        if (Redis::get('lazyLoad:'.$sortNum)) {

            return Redis::get('lazyLoad:'.$sortNum);
        }

        // $sortNum = 0;
        // return $sortNum; exit;

        //==============  查询根分类的信息  ====================================
        //查找根分类
        $sort = Sort::select(['id', 'sname', 'pid', 'path'])
            ->where('state', 1)
            ->where('pid', 0)
            ->get();
            // ->toArray();

        //根据首页传过来的数字(比方1),拿到第1个根分类的信息,如果传2,就获取第2个根分类信息,如此类推
        if (empty($sort[$sortNum])) {

            //如果没有根分类,则返回错误信息,不再前台遍历
            $rootSortData['result'] = [
                'code' => 404,
                'msg' => '没有根分类',
            ];

            return response()->json($rootSortData);

        } else {

            $rootSortData = $sort[$sortNum];
        }
        
        //===============  查询根分类的所有子分类  ================================
        $pid = $rootSortData['id'];     //取出根分类的id
        $pid = '%,'.$pid.',%';  //前后拼接 %, 以及 ,%    以便后面搜索所有的子分类

        //查询该根分类的所有子分类的id
        $sonSortId = Sort::select('id')
            ->where('path', 'like', $pid)
            ->where('state', 1)
            ->pluck('id')
            ->toArray();

        //查询子分类的详细信息
        $sonSort = Sort::select(['id', 'sname', 'pid', 'path'])
            ->whereIn('id', $sonSortId)
            ->get();
            // ->toArray();

        //把子分类信息放入根分类的数组sonsort下标里面
        $rootSortData['sonsort'] = $sonSort; 

        //==============  查询根分类底下的所有商品信息 ==================================
        //查询所有属于该根分类底下的所有商品信息
        $goodsList = Goods::select(['id', 'gname', 'price', 'pic', 'sid',])
            ->where('state', 1)         //状态为1,代表上架
            ->whereIn('sid', $sonSortId)
            ->orderBy('sales', 'desc')
            ->limit(8)
            ->get();
            // ->toArray();
        
        // dd($goodsList);
        
        //如果没有商品在根分类,返回错误信息,不再前台遍历
        if (empty($goodsList->toArray())) {

            $rootSortData['result'] = [
                'code' => 404,
                'msg' => '没有商品在此根分类',
            ];

            return response()->json($rootSortData);
        }

        //把所有商品信息放入根分类的数组goodslist下标里面
        $rootSortData['goodslist'] = $goodsList;

        //===============   查询属于该根分类底下的促销商品  ============================
        //查询属于该根分类底下的促销商品,按权限最高的,获取1条
        $time = time();
        $onePromotion = Sale_promotion::select(['id', 'gid', 'pid', 'sid', 'gname', 'sale_price', 'path'])
            ->where('sale_end_time', '>', $time)
            ->where('ad_address', 5)    //广告位置为5才显示在这里
            ->whereIn('sid', $sonSortId)
            ->first();
            // ->get()
            // ->toArray();
        
        //把促销商品信息放入该分类的数组sortpromot下标里面
        $rootSortData['sortpromot'] = $onePromotion;

        $str = json_encode($rootSortData);
        $tmp = json_decode($str, true);

        //返回成功状态
        $rootSortData['result'] = [
                'code' => 200,
                'msg' => '查询数据成功',
            ];

        Redis::set('lazyLoad:'.$sortNum, json_encode($rootSortData));
        Redis::expire('lazyLoad:'.$sortNum, 60*60*1);  //每1小时更新一次

        // dd($rootSortData, $tmp);
        // dd($onePromotion);
        // dd($rootSortData);

        return response()->json($rootSortData);

    }
}
